package com.xiaoyao.myframeapp.core.subscriber;

import android.content.Context;

import com.xiaoyao.myframeapp.core.BaseEntity;
import com.xiaoyao.myframeapp.core.Exception.ApiException;
import com.xiaoyao.myframeapp.utils.L;

import io.reactivex.disposables.Disposable;

/**
 * @author Administrator
 * @Author xiaoyao
 * @Email xiao80206040@qq.com
 * @Explain
 * @date 2018/7/3 0003
 */
public abstract class BaseObserver<T> extends BaseApiObserver<T> {

    private static final String TAG = "BaseObserver";
    private Context mContext;

    protected BaseObserver(Context context) {
        this.mContext = context.getApplicationContext();
    }

    /**
     * 用来随时取消和Observable的连接
     *
     * @param d
     */
    @Override
    public void onSubscribe(Disposable d) {

    }

    /**
     * 用来处理Observable的返回,也就是网络连接的返回
     *
     * @param value
     */
    @Override
    public void onNext(BaseEntity<T> value) {
        /**
         * 这里加入自己的全局错误判断 服务器自定义 如：登录失败，参数错误等等
         */
        if (value.isSuccess()) {
            T t = value.getData();
            onHandleSuccess(t);
        } else {
            onHandleError(value.getMsg());
        }
    }

    /**
     * 表示发生了错误，onComplete和onError两个方法中只会并且肯定会有一个方法被调用。
     * ApiException网络错误处理管理
     * TODO *******做一个自动弹出信息的********
     *
     * @param e
     */
    @Override
    public void onError(ApiException e) {
        onHandleError(e.message);
        L.e(TAG, "错误信息为 " + "code:" + e.code + "   message:" + e.message);
    }

    /**
     * 在onNext后被调用，表示完成
     */
    @Override
    public void onComplete() {
        L.e(TAG, "成功了");
    }


    protected abstract void onHandleSuccess(T t);

    /**
     *  错误信息返回
     */
    protected void onHandleError(String msg) {
        L.e(TAG, "错误信息为 " + "msg:" + msg);
    }
}